#include "lru.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void my_print(int a,int* arr,int nub)
{
  printf("Access:%d,Frames: [",a);
  for(int i=0;i<nub-1;i++)
    printf("%d,",arr[i]);
  printf("%d]\n",arr[nub-1]);
}


/**
 * 函数：模拟LRU页面置换算法。
 *
 * @param queue_frames 一个字符串，表示页面访问序列。
 *                     字符串中的每个字符是一个数字，表示一个页面号。
 * @param num_frames   页框的数量，表示物理内存中可用的页框数。
 */
void
fifo_page_replacement (char *queue_frames, int num)
{
  // TODO
  int *frame = (int *) malloc (num * sizeof (int));
  memset(frame,-1,num*sizeof(int));
  int *fre = (int *) malloc (num * sizeof (int));
  memset(fre,-1,num*sizeof(int));
  char *f = strtok (queue_frames, ",");
  while(f!=NULL)
  {
    int acc=atoi(f);
    int hit = 0;
    for(int i=0;i<num;i++)
      if(frame[i]==acc)
      {
        hit=1;
        fre[i]++;
        break;
      }
    if(hit==1)
    {
      my_print(acc,frame,num);
    }
    else
    {
      int minindex=0;
      for(int i=0;i<num;i++)
        if(fre[i]<fre[minindex])
        {
          minindex=i;
        }
        else if(fre[i]==-1)
        {
          minindex=i;
          break;
        }
      frame[minindex]=acc;
      fre[minindex]=1;
      my_print(acc,frame,num);
    }
    f=strtok(NULL,",");
  }
}
